LINUX: Fixes for XENFEAT_supervisor_mode_kernel and XENFEAT_writable_page_tables.
authorIan Campbell <ian.campbell@xensource.com>
Tue, 24 Apr 2007 21:35:16 +0000 (22:35 +0100)
committerIan Campbell <ian.campbell@xensource.com>
Tue, 24 Apr 2007 21:35:16 +0000 (22:35 +0100)
Signed-of-by: Ian Campbell <ian.campbell@xensource.com>
linux-2.6-xen-sparse/arch/x86_64/kernel/entry-xen.S
linux-2.6-xen-sparse/include/asm-x86_64/mach-xen/asm/mmu_context.h

index 4dbd7a7b0f6646baf56a65af6df45e206dc63f56..cc9694522f538c9deb56e85d94f874d657295218 100644 (file)
@@ -160,8 +160,8 @@ NMI_MASK = 0x80000000
        testl $NMI_MASK,2*8(%rsp)
        jnz   2f
 
-       testb $1,(xen_features+XENFEAT_supervisor_mode_kernel)
-       jnz   1f
+       cmp   $0x00,(xen_features+XENFEAT_supervisor_mode_kernel)(%rip)
+       jne   1f
 
        /* Direct iret to kernel space. Correct CS and SS. */
        orl   $3,1*8(%rsp)
index b6afab469f4d8f6019efedb6b61c8f98ddff3c32..e0a03bf3a7b7279219768df18f44f28771c13ce5 100644 (file)
@@ -72,7 +72,8 @@ static inline void switch_mm(struct mm_struct *prev, struct mm_struct *next,
        struct mmuext_op _op[3], *op = _op;
 
        if (likely(prev != next)) {
-               BUG_ON(!next->context.pinned);
+               BUG_ON(!xen_feature(XENFEAT_writable_page_tables) &&
+                      !next->context.pinned);
 
                /* stop flush ipis for the previous mm */
                cpu_clear(cpu, prev->cpu_vm_mask);